<?php

include_once '../Model/GateZtl.php';
include_once '../Model/GPS.php';
include_once '../Model/DateTime.php';
include_once '../AtacCommunicator/ACztl.php';
include_once 'Constants.php';
include_once '../Utility/DebugLogs.php';
include_once '../InfoManager/Constants.php';
include_once '../InfoManager/InfoZtl.php';
include_once '../Model/Location.php';
include_once '../Utility/BaseGeocode.php';
include_once '../Utility/GoogleGeocode.php';
include_once '../AtacCommunicator/Retriever.php';
include_once '../Utility/simplehtmldom/simple_html_dom.php';

class InfoAuto{
	
	public static $INFOSEPARATOR = '_';

	function __construct() {

	}
//Funzione per la creazione del URL	
	function URL_google($lat, $long, $arrivo){
		$URL="";
		$target="";
		$lt=$lat; $lg=$long;
		$target=str_replace(" ","+",$arrivo);

		$URL_inizio = "http://maps.google.com/maps?f=d&hl=it";
		$URL_partenza = "&saddr=";
		$URL_arrivo = "&daddr=";
		$URL_fine = "&ie=UTF8&0&om=0&output=kml";

		$URL = "".$URL_inizio.$URL_partenza.$lt.",".$lg.$URL_arrivo.$target.$URL_fine;
		return $URL;
	}//FINE FUNZIONE COSTRUZIONE URL
	
//Funzione che crea un Array di GeoPoint del Percorso richiesto	
	function CreaGeoPoint($element){
		$arrayGeoPoint = array();
		$array = $element;
		$separatore=",";
		for($i=0; $i< (sizeof($array)); $i++){
			$aux = $array[$i];
			$stringa = substr($aux,13,-14); 
			$sub = explode($separatore,$stringa);
			$latid = $sub[1];
			$longi = $sub[0];	
			$point = new GPS((float)$latid,(float)$longi);
			array_push($arrayGeoPoint,$point);
		}	
		return $arrayGeoPoint;	
	}//FINE FUNZIONE CREAZIONE ARRAY GEOPOINT
	
//Funzione che trova i varchi presenti sul Percorso
	function FindTheGate($aV,$aGP,$placemark){
		$arrayVarchi = $aV;
		$arrayGeoPoint = $aGP;
		$places = $placemark;
		$gates = array();
		$ia = new InfoAuto();
		$distance=null;
		
		//echo "Lung ArrayGeoPoint: ".(sizeof($arrayGeoPoint)-1).'<br>';
		$indici = array();
		$varchiscelti = array(); 
		//Cerco in quali Placemark c'è una Ztl tramite la VIA
		for ($t=0; $t<sizeof($places); $t++){	//Scorro il percorso
			for($v=0; $v<sizeof($arrayVarchi); $v++){//scorro i varchi
				$ind = strpos($placemark[$t],$arrayVarchi[$v]->getVia());
				//se la via del varco è nel percorso
				if ($ind != null || $ind != 0){//allora IND!=null o 0
					//echo $arrayVarchi[$v]->getVia()." at indice ".$t.'<br>';
					$index=0;$index = $t;
					$arrayVarchi[$v]->setIndice($t);
					array_push($varchiscelti,$arrayVarchi[$v]); 
			//salvo in un array gli indici degli Step del percorso
			//in cui è presente un varco
					array_push($indici,$t);//salvo 
				}
			}
		}
	//ora cerco se il varco scelto è presente tra i GeoPoint del percorso
	//partendo da quello appartenente allo Step scelto		
		for ($i=0; $i<sizeof($indici); $i++){
			$GP1 = $arrayGeoPoint[$indici[$i]];
			$GP2 = $arrayGeoPoint[$indici[$i]+1];
			$Lat1 = $GP1->getLat();
			$Lon1 = $GP1->getLon();
			$Lat2 = $GP2->getLat();
			$Lon2 = $GP2->getLon();
			$vLat = $varchiscelti[$i]->getLat();
			$vLon = $varchiscelti[$i]->getLon();
			$vpoint = new GPS($vLat,$vLon);
		//	echo "Gp1: ".$GP1->getLat().' - '.$GP1->getLon().'<br>';
		//	echo "Gp2: ".$GP2->getLat().' - '.$GP2->getLon().'<br>';
		//	echo "Varco ".$varchiscelti[$i]->getVia().'<br>';
			
		if ((($Lat1 <= $vLat) && ($vLat <= $Lat2)) && (($Lon1<=$vLon) && ($vLon<=$Lon2))) {
				//echo "tra ".$Lat1.','.$Lon1." e ".$Lat2.','.$Lon2.'<br>';
				//echo "IF1 Varco Trovato: ".$varchiscelti[$i]->getVia()." "."lat: ".$vLat." long: ".$vLon." ;".'<br>';				
				$distance = $GP1->distanceFrom($vpoint);
				$distance = $distance*1000; //echo "Distante ".$distance." m".'<br>';
				$varchiscelti[$i]->setDistance($distance);
				//$varchiscelti[$i]->setIndice($i);
				array_push($gates,$varchiscelti[$i]);
				break;	
			}
			else if ((($Lat1 <= $vLat && $vLat <= $Lat2) && ($Lon2<=$vLon && $vLon<=$Lon1))){
				//echo "tra ".$Lat1.','.$Lon1." e ".$Lat2.','.$Lon2.'<br>';
				//echo "IF2 Varco Trovato: ".$varchiscelti[$i]->getVia()." "."lat: ".$vLat." long: ".$vLon." ;".'<br>';
				$distance = $GP1->distanceFrom($vpoint);
				$distance = $distance*1000; //echo "Distante ".$distance." m".'<br>';
				$varchiscelti[$i]->setDistance($distance);
				//$varchiscelti[$i]->setIndice($i);
				array_push($gates,$varchiscelti[$i]);
				break;	
			}
			else if ((($Lat2 <= $vLat && $vLat <= $Lat1) && ($Lon1<=$vLon && $vLon<=$Lon2))){
			//	echo "tra ".$Lat1.','.$Lon1." e ".$Lat2.','.$Lon2.'<br>';			
			//	echo "IF3 Varco Trovato: ".$varchiscelti[$i]->getVia()." "."lat: ".$vLat." long: ".$vLon." ;".'<br>';
				$distance = $GP1->distanceFrom($vpoint);
				$distance = $distance*1000; //echo "Distante ".$distance." m".'<br>';
				$varchiscelti[$i]->setDistance($distance);
				//$varchiscelti[$i]->setIndice($i);
				array_push($gates,$varchiscelti[$i]);
				break;	
			}
			else if ((($Lat2 <= $vLat && $vLat <= $Lat1) && ($Lon2<=$vLon && $vLon<=$Lon1))){
				//echo "tra ".$Lat1.','.$Lon1." e ".$Lat2.','.$Lon2.'<br>';			
				//echo "IF4 Varco Trovato: ".$varchiscelti[$i]->getVia()." "."lat: ".$vLat." long: ".$vLon." ;".'<br>';
				$distance = $GP1->distanceFrom($vpoint);
				$distance = $distance*1000; //echo "Distante ".$distance." m".'<br>';
				$varchiscelti[$i]->setDistance($distance);
				//$varchiscelti[$i]->setIndice($i);
				array_push($gates,$varchiscelti[$i]);
				break;	
			}			
		
		}
		//Fine dei controlli per la ricerca dei varchi
		//Restituisco l'array dei varchi presenti nel percorso
		if ($gates == null) return null;
		else 
		return $gates;							
	}//FINE FUNZIONE FindTheGate
		
}//FINE CLASSE INFOAUTO

	
?>